评估算法性能
蓝桥杯备战资料《算法很美》Chapter2——查找排序(上)
各级别算法复杂度分析:
① n! 弱上界是 nn,因此增长速度非常快,即超慢。
② 2n,指数级爆发式增长,增长速度非常快,也是超慢。
③ O(n2)、O(n3),一般的竞赛题目是不允许到这种数量级的,很慢。
但是一般都可以优化到 nlgn。O(n2)级别的算法有:冒泡排序、插入排序和选择排序等。
④ O(nlgn),及格,一般分治法可以缩小层数到 lgn,而每层的复杂度一般为O(n),
例如:归并排序和快速排序等。
⑤ O(n),比较优秀的算法,比如连续求和最大子数组的线性解。
⑥ O(sqrt(n)),比O(n)更快,这种算法比较少,但不是不存在,比如判断一个数是否为素数。
⑦ O(lgn),很优秀,比如二分查找,但是这种算法往往对于输入数据格式有要求。
⑧ O(1),常量级,这是为数极少的效率最高的算法,多数是数据很规则。
各算法复杂度与运行时间对应关系:
对于一般的测评机来说,CPU 的运算速度大概是 1s 进行 108 次运算(好的CPU可能快10倍)。
算法复杂度 | 1s可以处理的规模 |
---|---|
n! | 11 |
2n | 26 |
n3 | 464 |
n2 | 104 |
nlgn | 4.5*106 |
n | 108 |
lgn | 2 ^ (10 ^8) |
递归算法的复杂度:
递归关系 | 结果 | 举例 |
---|---|---|
T(n) = T(n/2)+O(1) | T(n) = O(lgn) | 二分查找、GCD |
T(n) = T(n-1)+O(1) | T(n) = O(n) | 线性查找 |
T(n) = 2*T(n/2)+O(1) | T(n) = O(n) | |
T(n) = 2*T(n/2)+O(n) | T(n) = O(nlgn) | 归并排序、快速排序 |
T(n) = 2*T(n/2)+O(nlgn) | T(n) = O(n(lgn)2) | |
T(n) = T(n-1)+O(n) | T(n) = O(n2) | 选择排序、插入排序 |
T(n) = 2*T(n-1)+O(1) | T(n) = O(2n) | 汉诺塔问题 |
T(n) = T(n-1)+T(n-2)+O(1) | T(n) = O(2n) | 斐波那契 |
【END】感谢观看